// app.js
import {
  store
} from './utils/store';
import {
  refreshToken,
  validateToken
} from './api/sso'; // 假设你有一个刷新token的API
import{ getUserInfo }from './api/user';

App({
  store, // 直接使用导入的store

  onLaunch() {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        env: 'cloud1-0gdx4awdb1c4117a', // 替换为您的云开发环境ID
        traceUser: true,
      });
    }
    console.log('App Launch, store initialized:', this.store);
    // 清除过期提醒的存储变量
    wx.removeStorageSync('expiryAlertShown');
    wx.removeStorageSync('favoriteRecipes');
  },

  onShow() {
    // 每次显示时检查store状态
    console.log('App Show, current store state:', this.store);
  },

  async checkLoginStatus() {
    const accessTokenBCrypt = wx.getStorageSync('accessTokenBCrypt');
    const refreshTokenBCrypt = wx.getStorageSync('refreshTokenBCrypt');
    console.log("accessTokenBCrypt:",accessTokenBCrypt);
    console.log("refreshTokenBCrypt:",refreshTokenBCrypt);
    if (!accessTokenBCrypt && !accessTokenBCrypt) {
      console.log('用户未登录');
      this.showLoginModal(); // 显示登录模态框
      return false;
    }
    // 验证token是否有效
    try {
      const isValid = await this.validateToken(accessTokenBCrypt);
      console.log("isValid",isValid);
      if (!isValid) {
        console.log('Token无效，尝试刷新');
        const isRefresh = await this.refreshToken(refreshTokenBCrypt);
        if (isRefresh) {
          console.log('Token刷新成功');
          return true;
        } else {
          console.log('Token刷新失败，用户需要重新登录');
          this.showLoginModal(); // 显示登录模态框
          return false;
        }
      } else {
        console.log('Token有效');
        return true;
      }
    } catch (error) {
      console.error('检查登录状态失败:', error);
      return false;
    }
  },

  async validateToken(accessTokenBCrypt) {
    // 验证token
    const res = await validateToken(accessTokenBCrypt)
    return res.data;
  },

  async refreshToken(refreshTokenBCrypt) {
    try {
      const res = await refreshToken(refreshTokenBCrypt);
      if (res && res.data && res.data.accessTokenBCrypt) {
          // 保存accesstoken
        wx.setStorageSync('accessTokenBCrypt', res.data.accessTokenBCrypt);
        wx.setStorageSync('refreshTokenBCrypt', res.data.refreshTokenBCrypt)
        this.updateUserInfo(res.userId);
        return true;
      }
    } catch (error) {
      this.clearLocalStorage();
      console.error('刷新token失败:', error);
    }
    return null;
  },
  async updateUserInfo(userId) {
    try {
      const res = await getUserInfo(userId);
      if (res && res.data) {
        wx.setStorageSync('userInfo', res.data);
        this.store.setUserInfo(res.data);
        console.log('用户信息更新成功');
      }
    } catch (error) {
      console.error('获取用户信息失败:', error);
    }
  },
  clearLocalStorage() {
    wx.removeStorageSync('accessTokenBCrypt');
    wx.removeStorageSync('refreshTokenBCrypt');
    wx.removeStorageSync('userInfo');
    wx.removeStorageSync('favoriteRecipes')
    wx.removeStorageSync('expiryAlertShown');
  },
  // 显示登录模态框
  showLoginModal() {
          const pages = getCurrentPages();
          console.log("pages",pages);
          const currentPage = pages[pages.length - 1];
          if (currentPage) {
            currentPage.setData({
              showLoginModal: true
            });
          }
    //     }
    //   }
    // });
  },
  globalData: {
    // 全局数据
  }
});